"""
Case Type   : 服务端工具
Case Name   : 操作系统版本
Create At   : 2020/11/21
Owner       : opentestcase002
Description :
    检查操作系统信息
Expect      :
    检查完成
History     :
    2022-12-1 opentestcase039 优化用例，修改检查断言
    2023-3-22 opentestcase039 优化用例，最新代码取消对磁盘IO检查，修改用例以适配最新代码
    2023-6-13 opentestcase039 优化用例，适配最新代码
"""

import os
import re
import unittest

from testcase.utils.Constant import Constant
from testcase.utils.Logger import Logger
from yat.test import Node
from yat.test import macro

logger = Logger()


class Tools(unittest.TestCase):
    def setUp(self):
        logger.info(f'-----{os.path.basename(__file__)} end-----')
        self.rootNode = Node('default')
        self.Constant = Constant()

    def test_server_tools(self):
        logger.info('-----root用户检查操作系统信息-----')
        checkos_cmd = f'source {macro.DB_ENV_PATH};gs_checkos -i B;'
        logger.info(checkos_cmd)
        msg = self.rootNode.sh(checkos_cmd).result()
        logger.info(msg)
        logger.info('-----解析执行结果-----')
        info_lis = re.findall('.*\[.*\].*:.*', msg)
        logger.info(info_lis)
        status_list = []
        num_list = []
        logger.info('-----提取选项信息-----')
        for i in info_lis:
            num_list.append(i.split('.')[0].strip())
        logger.info(num_list)
        logger.info('-----提取状态信息-----')
        for j in info_lis:
            status_list.append(j.split(':')[-1].strip())
        logger.info(status_list)

        logger.info('-----断言，判断选项信息是否正确，判断状态信息是否正常-----')
        check_lis = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8']
        self.assertEqual(check_lis, num_list, 'checkos检查项失败')
        for check_info in status_list:
            self.assertIn(check_info, ['Normal', 'Warning', 'Abnormal'],
                          '回显信息错误')

    def tearDown(self):
        logger.info('-----无需清理环境-----')
        logger.info(f'-----{os.path.basename(__file__)} end-----')
